java当数组位于arraylist中时,如何访问它?
我尝试做的总体目标是将字符串与数组的索引0(保存在arraylist中)进行比较,如果字符串相同(忽略大小写),则调用一个方法,将字符串的大小写与翻译的单词(保存在arraylist中数组的索引1处)匹配。当我运行这段代码并打印出翻译后的arraylist的内容时,我会得到所有“不匹配”字符。我假设这是因为我没有以正确的方式访问我想要的索引。请帮忙
public static String translate(String word, ArrayList<String[]> wordList) {
if (word == "." || word == "!" || word == ";" || word == ":") {
return word;
}
for (int i = 0; i < wordList.size(); i++) {
String origWord = wordList.get(i)[0];
String transWord = wordList.get(i)[1];
if (word.equalsIgnoreCase(origWord)) { //FIXME may need to change if you need to switch from translated to original
String translated = matchCase(word, transWord);
return translated;
}
}
String noMatch = Character.toString(Config.LINE_CHAR);
return noMatch;
}
样本数据和预期结果
word=“你好”
词表。获取(i)[0]=“你好”
词表。得到(i)[1]=“你好”
(word和wordList.get(i)[0]匹配,执行下一步)
调用match case方法并返回与原始单词大小写相同的翻译单词->
翻译为“你好”
返回已翻译的单词
(for循环遍历整个单词列表,直到找到匹配项,然后调用translate方法)
**
匹配案例代码
public static String matchCase(String template, String original) {
String matched = "";
if (template.length() > original.length()) {
for (int i = 1; i <= original.length(); i++) {
if (template.charAt(i-1) >= 'a' && template.charAt(i-1) <= 'z') {
if (i == original.length()) {
matched += original.substring(original.length() - 1).toLowerCase();
}
else {
matched += original.substring((i-1), i).toLowerCase();
}
}
else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
if (i == original.length()) {
matched += original.substring(original.length() - 1).toUpperCase();
}
else {
matched += original.substring((i-1), i).toUpperCase();
}
}
}
return matched;
}
else if (template.length() < original.length()) {
int o;
original.toLowerCase();
for (int i = 1; i <= template.length(); i++) {
if (template.charAt(i-1) >= 'a' && template.charAt(i-1) <= 'z') {
if (i == template.length()) {
matched += original.substring(original.length() - 1).toLowerCase();
}
else {
matched += original.substring((i-1), i).toLowerCase();
}
}
else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
if (i == template.length()) {
matched += original.substring(original.length() - 1).toUpperCase();
}
else {
matched += original.substring((i-1), i).toUpperCase();
}
}
String newMatched = matched + original.substring(i, original.length() - 1);
matched = newMatched;
newMatched = "";
}
return matched;
}
return original;
}
# 1 楼答案
我已经测试了您的代码,它与您提供的示例配合得相当好。我帮不了你的忙
然而,有一些缺陷需要通知,还有一些改进需要建议:
==
进行比较。使用equals
方法并查看why李>这并不重要,但为什么总是计算
noMatch
。为什么不把它作为常数声明一次呢public static final String NO_MATCH = String.valueOf(Config.LINE_CHAR);
更重要的是,我认为
matchCase
在设计上并不真正相关,而且过于复杂。我认为你应该确定要翻译的单词都是小写还是大写,或者第一个字母都是大写,后面的字母都是小写。当长度不同时,你所做的(逐字比较大小写)并不真正相关